package com.ceair.authorization.device;

import org.springframework.lang.Nullable;
import org.springframework.security.core.Transient;
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2ClientAuthenticationToken;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;

import java.util.Map;

/**
 * @author wangbaohai
 * @ClassName DeviceClientAuthenticationToken
 * @description: 设备码模式token
 * @date 2024年11月15日
 * @version: 1.0.0
 */
@Transient
public class DeviceClientAuthenticationToken extends OAuth2ClientAuthenticationToken {

    /**
     * 构造函数用于创建DeviceClientAuthenticationToken对象
     * 该对象表示设备客户端的认证令牌，用于在与认证服务器交互时标识和验证客户端
     *
     * @param clientId 客户端ID，用于唯一标识客户端
     * @param clientAuthenticationMethod 客户端认证方法，定义了如何对客户端进行认证
     * @param credentials 客户端凭证，如密码或证书，用于认证客户端（可选）
     * @param additionalParameters 附加参数，包含其他相关信息（可选）
     */
    public DeviceClientAuthenticationToken(String clientId, ClientAuthenticationMethod clientAuthenticationMethod,
                                           @Nullable Object credentials,
                                           @Nullable Map<String, Object> additionalParameters) {
        super(clientId, clientAuthenticationMethod, credentials, additionalParameters);
    }

    /**
     * 构造函数用于创建一个设备客户端认证令牌
     *
     * @param registeredClient 注册过的客户端信息，不能为空
     * @param clientAuthenticationMethod 客户端认证方法，不能为空
     * @param credentials 客户端的认证凭据，可以为空
     */
    public DeviceClientAuthenticationToken(RegisteredClient registeredClient,
                                           ClientAuthenticationMethod clientAuthenticationMethod,
                                           @Nullable Object credentials) {
        super(registeredClient, clientAuthenticationMethod, credentials);
    }

}
